package com.course02.order_backend.controller.LXY;

// 在配置文件上添加注解，开启注解校验
//官网地址: https://docs.spring.io/spring-security/reference/5.8/servlet/authorization/method-security.html

import com.course02.order_backend.dto.LXY.Result;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 测试控制器
 * 验证SpringSecurity是否生效
 */
@RestController
public class HelloController {
    /**
     * 测试方法1 -- 游客访问 -- 不登录也可以访问
     */
    @GetMapping(value = "/test1")
    public Result test1(){
        System.out.println("test1...");
        return Result.ok("test1...");
    }

    /**
     * 测试方法2 -- 登录后才可以访问
     */
    @GetMapping(value = "/test2")
    public Result test2(){
        System.out.println("test2...");
        return Result.ok("test2...");
    }

    /**
     * 测试方法3 -- 登录后，具有 ROLE_ADMIN 角色才能访问
     */
    @PreAuthorize(value = "hasRole('ADMIN')")
    @GetMapping(value = "/test3")
    public Result test3(){
        System.out.println("test3...");
        return Result.ok("test3...");
    }

    /**
     * 测试方法4 -- 登录后，具有admin或者CEO角色才能访问
     */
    @PreAuthorize(value = "hasAnyRole('admin','CEO')")
    @GetMapping(value = "/test4")
    public Result test4(){
        System.out.println("test4...");
        return Result.ok("test4...");
    }

    /**
     * 测试方法5 -- 登录后，同时具有CTO和CFO角色才能访问
     */
    @PreAuthorize(value = "hasRole('CTO') and hasRole('CEO')")
    @GetMapping(value = "/test5")
    public Result test5(){
        System.out.println("test5...");
        return Result.ok("test5...");
    }
    /**
     * 测试方法6 -- 登录后，具有 system:user:add 权限可以访问
     */
    @PreAuthorize(value = "hasAuthority('system:user:add')")  // 完整权限码!!!
    @GetMapping(value = "/test6")
    public Result test6(){
        System.out.println("test6...");
        return Result.ok("test6...");
    }


    /**
     * 测试方法7 -- 登录后，具有 system:user:add 或者 system:user:delete 权限可以访问
     */
    @PreAuthorize(value = "hasAnyAuthority('system:user:add','system:user:delete')")
    @GetMapping(value = "/test7")
    public Result test7(){
        System.out.println("test7...");
        return Result.ok("test7...");
    }

    /**
     * 测试方法8 -- 登录后，具有 system:user:add 和 system:user:delete 权限可以访问
     */
    @PreAuthorize(value = "hasAuthority('system:user:add') and hasAuthority('system:user:delete')")
    @GetMapping(value = "/test8")
    public Result test8(){
        System.out.println("test8...");
        return Result.ok("test8...");
    }
}
